﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLLMagiPack.Managers;
using ModeloMagiPack.Entidades;

namespace MaGiPack.Fabricacion
{
    public partial class FrmOrdenes : Form
    {
        public FrmOrdenes()
        {
            InitializeComponent();
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Utilidades.Application_ThreadException);
        }


        private void CargarFiltros()
        {
            cboClientes.Items.Add("<Todos>");

            BLLCliente bllCliente = new BLLCliente();
            foreach (Cliente clienteActual in bllCliente.TraerClientes().OrderBy(c => c.Nombre).ToList())
                cboClientes.Items.Add(clienteActual);
            cboClientes.SelectedIndex = 0;

            cboModelos.Items.Add("<Todos>");
            BLLModeloCaja bllModelo = new BLLModeloCaja();
            foreach (ModeloCaja modeloActual in bllModelo.TraerModeloCajas().OrderBy(m => m.Codigo).ToList())
                cboModelos.Items.Add(modeloActual);
            cboModelos.SelectedIndex = 0;
        }

        private void BuscarOrdenes()
        {
            int? idCliente = null;
            if (cboClientes.SelectedIndex > 0)
                idCliente = (cboClientes.SelectedItem as Cliente).IdCliente;
            
            int? idModeloCaja = null;
            if (cboModelos.SelectedIndex > 0)
                idModeloCaja = (cboModelos.SelectedItem as ModeloCaja).IdModeloCaja;

            BLLOrden bll = new BLLOrden();
            dgvOrdenes.DataSource = (from o in bll.TraerOrdenes(idCliente, idModeloCaja)
                                     select new
                                     {
                                         IdOrdenFabricacion = o.IdOrden,
                                         Modelo = new BLLModeloCaja().TraerModeloCaja(o.IdModeloCaja).Codigo,
                                         MedidasInteriores = new BLLModeloCaja().TraerModeloCaja(o.IdModeloCaja).MedidasInteriores,
                                         Cliente = new BLLCliente().TraerCliente(o.IdCliente).Nombre,
                                         Fecha = o.Fecha
                                     }).ToList();
        }

        private void EditarOrden()
        {
            if (dgvOrdenes.SelectedRows.Count > 0)
            {
                int idOrden = (int)dgvOrdenes.SelectedRows[0].Cells[0].Value;
                BLLOrden bllOrden = new BLLOrden();
                OrdenCompleta completa = bllOrden.TraerOrdenCompleteta(idOrden);
                FrmOrdenFabricacion frmOrden = new FrmOrdenFabricacion(completa);
                frmOrden.StartPosition = FormStartPosition.CenterScreen;
                frmOrden.MdiParent = this.MdiParent;
                frmOrden.Show();
                frmOrden.FormClosed += new FormClosedEventHandler(frmOrden_FormClosed);
            }
        }

        private void EliminarOrden()
        {
            if (dgvOrdenes.SelectedRows.Count > 0 && MessageBox.Show("¿Eliminar orden seleccionada junto a todos sus datos?", "PREGUNTA", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                int idOrden = (int)dgvOrdenes.SelectedRows[0].Cells[0].Value;
                BLLOrden bllOrden = new BLLOrden();
                bllOrden.EliminarOrden(idOrden);
                BuscarOrdenes();
            }
        }


        private void FrmOrdenes_Load(object sender, EventArgs e)
        {
            CargarFiltros();
        }

        private void frmOrden_FormClosed(object sender, FormClosedEventArgs e)
        {
            BuscarOrdenes();
        }

        private void btnBuscarOrdenes_Click(object sender, EventArgs e)
        {
            BuscarOrdenes();
        }

        private void dgvOrdenes_SelectionChanged(object sender, EventArgs e)
        {
            btnEditar.Enabled = btnRemover.Enabled = dgvOrdenes.SelectedRows.Count > 0;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            FrmOrdenFabricacion frmOrden = new FrmOrdenFabricacion();
            frmOrden.MdiParent = this.MdiParent;
            frmOrden.StartPosition = FormStartPosition.CenterScreen;
            frmOrden.Show();
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            EliminarOrden();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            EditarOrden();
        }

        private void dgvOrdenes_DoubleClick(object sender, EventArgs e)
        {
            EditarOrden();
        }
    }
}
